home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 March / PCWorld_2007-03_cd.bin / temacd / maxthon / mcombo.exe / Plugin / Digg Sidebar / scripts / Digg.js next >
Text File  |  2006-08-31  |  8KB  |  287 lines

  1. /**************************
  2.     Digg Sidebar
  3.     By Neo101
  4.     Version 1.0.0
  5. **************************/
  6.  
  7. checkSettingsFile()
  8.  
  9. var itemsOnPage = parseInt( readSetting('itemsOnPage', '10') )
  10.  
  11. var categoryFeed = readSetting('categoryFeed', 'containertechnology.xml')
  12. var categoryUpcomingFeed = readSetting('categoryUpcomingFeed', 'containertechnology.xml')
  13. var category = readSetting('category', 'technology')
  14. var categoryUpcoming = readSetting('categoryUpcoming', 'technology')
  15. var showLoadingMessage = readSetting('showLoadingMessage', '1')
  16.  
  17. var loadedUpcoming = false
  18.  
  19. var popular = new Array()
  20. var upcoming = new Array()
  21. var searchResults = new Array()
  22.  
  23. var element
  24. var start
  25. var xmlhttp
  26.  
  27. var feeds = {'technology': 
  28.                 ['containertechnology', 'indexapple', 'indexdesign', 'indexgadgets', 'indexhardware',
  29.                     'indextech_news', 'indexlinux_unix', 'indexmods', 'indexprogramming', 'indexsecurity',
  30.                     'indexsoftware', 'indextech_deals'],
  31.             'science':
  32.                 ['containerscience', 'indexspace', 'indexenvironment', 'indexhealth', 'indexgeneral_sciences'],
  33.             'world_business':
  34.                 ['containerworld_business', 'indexbusiness_finance', 'indexpolitics', 'indexpolitical_opinion',
  35.                     'indexworld_news', 'indexoffbeat_news'],
  36.             'sports':
  37.                 ['containersports', 'indexbaseball', 'indexbasketball', 'indexextreme_sports', 'indexfootball', 
  38.                     'indexgolf', 'indexhockey', 'indexmotorsport', 'indexsoccer', 'indextennis', 'indexother_sports'],
  39.             'videos':
  40.                 ['containervideos', 'indexvideos_animation', 'indexvideos_comedy', 'indexvideos_educational',
  41.                     'indexvideos_gaming', 'indexvideos_music', 'indexvideos_people', 'indexvideos_sports'],
  42.             'entertainment':
  43.                 ['containerentertainment', 'indexcelebrity', 'indexmovies', 'indexmusic', 'indextelevision'],
  44.             'gaming':
  45.                 ['containergaming', 'indexgaming_news', 'indexplayable_web_games']
  46.             }
  47.  
  48.  
  49. window.onload = function(){    
  50.     viewPopularFeed()
  51.     
  52.     setSelectBox('category', 'category')
  53.     setSelectBox('categoryUpcoming', 'categoryUpcoming')
  54.     setSubCategory('subCategoryDiv', category, categoryFeed)
  55.     setSubCategory('subCategoryUpcomingDiv', categoryUpcoming, categoryUpcomingFeed)
  56. }
  57.  
  58.  
  59. function viewPopularFeed(){
  60.     var url = 'http://digg.com/rss/' + categoryFeed
  61.     element = 'popular'
  62.     start = 0
  63.     loadXMLDoc(url, onResponseView)
  64.     
  65.     if(showLoadingMessage == '1'){
  66.         document.getElementById( 'popular' ).insertAdjacentHTML('afterBegin', '<div class=loading>Loading...</div>')
  67.     }
  68. }
  69.  
  70.  
  71. function viewUpcomingFeed(){
  72.     var url = 'http://digg.com/rss/' + categoryUpcomingFeed
  73.     element = 'upcoming'
  74.     start = 0
  75.     loadXMLDoc(url, onResponseView)
  76.     
  77.     if(showLoadingMessage == '1'){
  78.         document.getElementById( 'upcoming' ).insertAdjacentHTML('afterBegin', '<div class=loading>Loading...</div>')
  79.     }
  80. }
  81.  
  82.  
  83. function search(){
  84.     var keywords = document.getElementById('keywords').value
  85.     if(keywords == ''){
  86.         document.getElementById('searchResults').innerHTML = 'Please enter a keyword!'
  87.         return
  88.     }
  89.     var area = 'all'
  90.     var type = 'both'
  91.     var age = 'all'
  92.     var url = 'http://digg.com/rss_search?area=' + area + '&type=' + type + '&age=' + age + '&search=' + keywords
  93.     element = 'searchResults'
  94.     start = 0
  95.     document.getElementById('searchResults').innerHTML = 'Loading....<br>This could take a while...'
  96.     loadXMLDoc(url, onResponseView)
  97. }
  98.  
  99.  
  100. function loadXMLDoc(url, stateChange){
  101.     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
  102.     xmlhttp.onreadystatechange = stateChange;
  103.     xmlhttp.open("GET", url, true);
  104.     xmlhttp.setRequestHeader("User-Agent","Maxthon Digg Sidebar 1.0")
  105.     xmlhttp.send(null)
  106. }
  107.  
  108.  
  109. function checkReadyState(obj){
  110.     if(obj.readyState == 4){
  111.         if(obj.status == 200 || obj.status == 201){
  112.             return true;
  113.         }
  114.         else{
  115.             showError(obj.status + ' ' + obj.responseText);
  116.         }
  117.     }
  118. }
  119.  
  120.  
  121. function onResponseView(){
  122.     if( ! checkReadyState(xmlhttp) ){
  123.         return
  124.     }
  125.  
  126.     var responseXML = xmlhttp.responseXML
  127.  
  128.     if(responseXML == null){
  129.         showError('Error 212: Could not parse feed <br>Make sure Digg is working')
  130.         return
  131.     }
  132.     
  133.     var response = '<ul>'
  134.     
  135.     var rssFeeds = new Array()
  136.     
  137.     items = responseXML.getElementsByTagName("item")
  138.  
  139.     if(items && items.length != 0 ){
  140.         for(var j=0; j < items.length; j++) {
  141.             addFeedItem(items[j], rssFeeds)
  142.         }
  143.     }
  144.     else{
  145.         response += '<b>Nothing found</b>'
  146.     }
  147.     
  148.     response += writeFeedHtml( rssFeeds )
  149.     
  150.     document.getElementById(element).innerHTML = response
  151.     
  152.     eval( element + ' = rssFeeds ')
  153.  
  154.     createNextPreviousLinks()
  155.     
  156.     
  157. }
  158.  
  159.  
  160. function writeFeedHtml( array){
  161.     var response = '<ul>'
  162.     
  163.     for(var i=0; i<array.length && i<itemsOnPage; i++){
  164.         var item = array[i]
  165.         response += '<li>'+
  166.                         '<a href="' + item.link + '" target=_blank class=title title="' + item.tooltip + '">' + item.title + '</a>' +
  167.                         //'<h3 onclick="expandCollapse(this)">' + item.title + '</h3>' +
  168.                         //'<div style="display:none">' + item.tooltip + '</div>'
  169.                     '<\/li>'
  170.     }
  171.     response += '<\/ul>'
  172.     
  173.     return response
  174. }
  175.  
  176.  
  177. function addFeedItem( item , array){
  178.     var title = ''
  179.     var link = ''
  180.     var description = ''
  181.     var pubDate = ''
  182.     var diggCounter = ''
  183.     var diggCategory = ''
  184.     var diggCommentCount = ''
  185.     
  186.     var nodes = item.childNodes
  187.     
  188.     for(var i=0; i < nodes.length; i++){
  189.         var tagName = nodes(i).tagName
  190.         var tagText = nodes(i).text
  191.         if(tagName=='title'){
  192.             title = replacer(tagText)
  193.         }
  194.         else if(tagName=='link'){
  195.             link = tagText
  196.         }
  197.         else if(tagName=='description'){
  198.             description = replacer(tagText)
  199.         }
  200.         else if(tagName=='pubDate'){
  201.             pubDate = replacer(tagText)
  202.         }
  203.         else if(tagName=='digg:diggCount'){
  204.             diggCounter = replacer(tagText)
  205.         }
  206.         else if(tagName=='digg:category'){
  207.             diggCategory = replacer(tagText)
  208.         }
  209.         else if(tagName=='digg:commentCount'){
  210.             diggCommentCount = replacer(tagText)
  211.         }
  212.     }
  213.     
  214.     var tooltip = description
  215.     tooltip += '\nDate: ' + pubDate
  216.     if(diggCounter != ''){
  217.         tooltip += '\nDigg Count: ' + diggCounter
  218.     }
  219.     if(diggCommentCount != ''){
  220.         tooltip += '\nDigg Comment Count: ' + diggCommentCount
  221.     }
  222.     tooltip += '\nDigg Category: ' + diggCategory
  223.     
  224.     
  225.     if(title != '' && link != ''){
  226.         array.push( {'title':title,
  227.                     'link':link,
  228.                     'description':description,
  229.                     'tooltip':tooltip,
  230.                     'pubDate':pubDate,
  231.                     'diggCounter':diggCounter,
  232.                     'diggCategory':diggCategory
  233.                     } )
  234.     }
  235. }
  236.  
  237.  
  238. function createNextPreviousLinks(){
  239.     var next = start + itemsOnPage
  240.     var previous = start - itemsOnPage
  241.     
  242.     var nextPreviousHTML = ''
  243.     
  244.     if( previous >= 0 ){
  245.         nextPreviousHTML += '<a href="javascript:showFeedPart(\'' + element + '\', ' + previous + ')" class=prevNext>« Previous</a>'
  246.     }
  247.     if( previous >= 0 && next < 40 ){
  248.         nextPreviousHTML += '<span style="width:30px"></span>'
  249.     }
  250.     if( next < 40 ){
  251.         nextPreviousHTML += '<a href="javascript:showFeedPart(\'' + element + '\', ' + next + ')" class=prevNext>Next »</a>'
  252.     }
  253.     
  254.     document.getElementById(element + 'NextPreviousHead').innerHTML = nextPreviousHTML
  255.     document.getElementById(element + 'NextPreviousBottom').innerHTML = nextPreviousHTML
  256. }
  257.  
  258.  
  259. function showFeedPart(element, start){
  260.     eval('var array = ' + element)
  261.     top.start = start
  262.     top.element = element
  263.     array = array.slice(start,start + itemsOnPage)
  264.     
  265.     var response = '<ul>'
  266.     response += writeFeedHtml( array )
  267.     response += '</ul>'
  268.     
  269.     document.getElementById(element).innerHTML = response
  270.     
  271.     createNextPreviousLinks()
  272. }
  273.  
  274.  
  275. function replacer(s){
  276.     return s.replace(/&/g,'&').replace(/"|"/g,'');
  277. }
  278.  
  279.  
  280. function setSelectBox(id, feed){
  281.     var selectElement = document.getElementById(id)
  282.     for(var i=0; i<selectElement.options.length; i++){
  283.         if( eval('selectElement.options[i].value.search(' + feed + ') != -1') ){
  284.             selectElement.selectedIndex = i
  285.         }
  286.     }
  287. }